package cn.edu.swu.miniwebsvr.core;

import java.util.Collections;
import java.util.HashMap;
import java.util.Map;

public class Parameter {
    private String method;
    private String url;
    private Map<String, String> urlParams = new HashMap<>();
    private Map<String, String> bodyParams = new HashMap<>();
    private Map<String, String> headers = new HashMap<>();

    // TODO: [222024321072052/然娜·吐尔逊汗] 补充必要的构造函数、setter、getter方法
    // 无参构造（HttpParser解析时需要）
    public Parameter() {}

    // URL参数的setter（批量添加，用于解析URL参数时）
    public void setUrlParams(Map<String, String> urlParams) {
        this.urlParams.clear();
        this.urlParams.putAll(urlParams);
    }

    // URL参数的单个添加（可选）
    public void addUrlParam(String key, String value) {
        this.urlParams.put(key, value);
    }

    // 请求体参数的setter（批量添加，用于解析POST请求体时）
    public void setBodyParams(Map<String, String> bodyParams) {
        this.bodyParams.clear();
        this.bodyParams.putAll(bodyParams);
    }

    // 请求体参数的单个添加（可选）
    public void addBodyParam(String key, String value) {
        this.bodyParams.put(key, value);
    }

    // 请求头的setter（批量添加）
    public void setHeaders(Map<String, String> headers) {
        this.headers.clear();
        this.headers.putAll(headers);
    }

    // 请求头的单个添加（解析请求头时逐行添加）
    public void addHeader(String key, String value) {
        this.headers.put(key, value);
    }

    // 已有方法保持不变
    public Map<String, String> getAllParams() {
        Map<String, String> allParams = new HashMap<>();
        allParams.putAll(urlParams);
        allParams.putAll(bodyParams);
        return Collections.unmodifiableMap(allParams);
    }

    public String getParam(String name) {
        if (bodyParams.containsKey(name)) {
            return bodyParams.get(name);
        }
        return urlParams.get(name);
    }
    // 示例 Getter/Setter，请补全
    public void setMethod(String method) {
        this.method = method;
    }

    public String getMethod() {
        return this.method;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public String getUrl() {
        return this.url;
    }

    public Map<String, String> getHeaders() {
        return Collections.unmodifiableMap(headers); // 返回不可修改的视图，避免外部篡改
    }

    public Map<String, String> getUrlParams() {
        return Collections.unmodifiableMap(urlParams);
    }

    public Map<String, String> getBodyParams() {
        return Collections.unmodifiableMap(bodyParams);
    }
}